package string;

public class StringComparison {
    public static void main(String[] args) {
        String s1 = "apple";
        String s2 = "Apple";
        String s3 = "apple";
        String s4 = new String("apple");

        // 1. 使用equals()比较内容（区分大小写）
        System.out.println("s1.equals(s3): " + s1.equals(s3)); // true
        System.out.println("s1.equals(s2): " + s1.equals(s2)); // false
        System.out.println("s1.equals(s4): " + s1.equals(s4)); // true

        // 2. 使用equalsIgnoreCase()比较（不区分大小写）
        System.out.println("s1.equalsIgnoreCase(s2): " + s1.equalsIgnoreCase(s2)); // true

        // 3. 使用==比较引用（是否为同一对象）
        System.out.println("\n== 比较:");
        System.out.println("s1 == s3: " + (s1 == s3)); // true（常量池同一对象）
        System.out.println("s1 == s4: " + (s1 == s4)); // false（不同对象）

        // 4. 使用compareTo()比较（按字典顺序）
        // 返回值：0-相等，正数-s1大于s2，负数-s1小于s2
        System.out.println("\ncompareTo() 比较:");
        System.out.println("s1.compareTo(s3): " + s1.compareTo(s3)); // 0
        System.out.println("s1.compareTo(s2): " + s1.compareTo(s2)); // 32（'a'与'A'的ASCII差）
        System.out.println("s2.compareTo(s1): " + s2.compareTo(s1)); // -32

        // 5. 使用compareToIgnoreCase()比较（不区分大小写）
        System.out.println("s1.compareToIgnoreCase(s2): " + s1.compareToIgnoreCase(s2)); // 0

        // 6. 其他比较方法
        System.out.println("\n其他比较:");
        System.out.println("s1.startsWith(\"app\"): " + s1.startsWith("app")); // true
        System.out.println("s1.endsWith(\"ple\"): " + s1.endsWith("ple"));     // true
        System.out.println("s1.contains(\"pp\"): " + s1.contains("pp"));       // true

        // 7. 空字符串比较注意事项
        String nullStr = null;
        String emptyStr = "";
        String blankStr = "  ";

        // 避免空指针异常的比较方式
        System.out.println("\n安全比较:");
        System.out.println("s1.equals(nullStr): " + s1.equals(nullStr)); // false，不会抛异常
        // System.out.println(nullStr.equals(s1)); // 会抛出NullPointerException

        System.out.println("emptyStr.isEmpty(): " + emptyStr.isEmpty()); // true
        System.out.println("blankStr.isBlank(): " + blankStr.isBlank()); // true（Java 11+）
    }
}
